const listener = {}
// 用于保存订阅者
// 注册订阅者
const subscribe = (event, handle) => {
// 订阅者订阅的信息
  if (typeof event !== 'string') {
    throw new Error('event must be String!')
  }
  // 订阅者的callback函数
  if (typeof handle !== 'function') {
    throw new Error('handle must be function!')
  }
  // 将订阅者添加到订阅者容器中保存起来
  if (!listener[event]) {
    listener[event] = []
    listener[event].push(handle)
  } else {
    const index = listener[event].indexOf(handle)
    if (index < 0) {
      listener[event].push(handle)
    }
  }
  // 返回用于取消订阅的接口，这里是一个高阶函数
  return () => {
    const index = listener[event].indexOf(handle)
    if (index > -1) {
      listener.splice(index, 1)
    }
  }
}
// 为通知者提供的发起通知的接口
const dispatch = (event, payload) => {
  if (listener[event]) {
    listener[event].forEach(item => {
      item(payload)
    })
  } else {
    throw new Error('No subscriber be registried for serviceName!')
  }
}
export { subscribe, dispatch }
